package org.jprogger.myworld.api.secure;

import java.util.Map;
import java.util.Iterator;
import java.util.SortedMap;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class DigestUtils {

	private static String convertToHex(byte[] data) {
        StringBuilder buf = new StringBuilder();
        for (int i = 0; i < data.length; i++) {
            int halfbyte = (data[i] >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                if ((0 <= halfbyte) && (halfbyte <= 9))
                    buf.append((char) ('0' + halfbyte));
                else
                    buf.append((char) ('a' + (halfbyte - 10)));
                halfbyte = data[i] & 0x0F;
            } while(two_halfs++ < 1);
        }
        return buf.toString();
    }
	
	public static String makeDigest(SortedMap<String, Object> params, String secretKey) 
			throws NoSuchAlgorithmException, UnsupportedEncodingException {
		
		MessageDigest messageDigest = MessageDigest.getInstance("MD5");
		StringBuilder paramString = new StringBuilder();
		Iterator<Map.Entry<String, Object>> iter = params.entrySet().iterator();
		while (iter.hasNext()) 
		{
			Map.Entry<String, Object> me = (Map.Entry<String, Object>) iter.next();
			paramString.append(me.getKey());
			paramString.append("=");
			paramString.append(me.getValue().toString());
		}
		paramString.append(secretKey);
		
	    byte[] md5hash = new byte[32];
	    messageDigest.update(paramString.toString().getBytes("iso-8859-1"), 0, paramString.toString().length());
	    md5hash = messageDigest.digest();
	        
	    return convertToHex(md5hash);
	}
}
